package top.ochiamalu.aioj.service;

import top.ochiamalu.aioj.domain.entity.OAuth;
import com.baomidou.mybatisplus.extension.service.IService;
import top.ochiamalu.aioj.domain.vo.user.UserLoginVO;
import top.ochiamalu.aioj.domain.dto.oauth.OAuthUserDTO;
import top.ochiamalu.aioj.enums.OAuthTypeEnum;

import java.io.IOException;

/**
 * oauth服务
 *
 * @author ochiamalu
 * @date 2025/03/12
 */
public interface OAuthService extends IService<OAuth> {

    /**
     * GitHub授权登录
     */
    UserLoginVO authGithub(String code) throws IOException;

    /**
     * 获取GitHub用户信息
     */
    OAuthUserDTO getGithubUser(String code) throws IOException;

    /**
     * 绑定GitHub账号
     */
    UserLoginVO bindGithub(Long userId, OAuthUserDTO githubUser);

    /**
     * 检查用户是否已绑定GitHub
     */
    boolean isGithubBound(Long userId);

    /**
     * 解绑GitHub账号
     */
    boolean unbindGithub(Long userId);

    /**
     * Gitee授权登录
     */
    UserLoginVO authGitee(String code) throws IOException;

    /**
     * 获取Gitee用户信息
     */
    OAuthUserDTO getGiteeUser(String code) throws IOException;

    /**
     * 绑定Gitee账号
     */
    UserLoginVO bindGitee(Long userId, OAuthUserDTO giteeUser);

    /**
     * 检查用户是否已绑定Gitee
     */
    boolean isGiteeBound(Long userId);

    /**
     * 解绑Gitee账号
     */
    boolean unbindGitee(Long userId);

    /**
     * 根据类型和OpenID获取OAuth信息
     */
    OAuth getByTypeAndOpenId(OAuthTypeEnum type, String openId);
}
